perm filename NLF.SAI[LOU,BGB] blob sn#084656 filedate 1974-12-08 generic text, type T, neo UTF8
COMMENT ⊗   VALID 00003 PAGES 
RECORD PAGE   DESCRIPTION
 00001 00001
 00002 00002	BEGIN "NLF"
 00008 00003	PUT_DATA(0,0,"NLF")
 00011 ENDMK
⊗;
BEGIN "NLF"
REQUIRE "PREAMB.sai[SYS,HE]" SOURCE_FILE;
REQUIRE 200 STRING_SPACE;
DEFINE CRLF="'15&'12";
PRELOAD_WITH 0, 0, 0.4, 1.0;
SAFE REAL ARRAY SL[1:4];
SAFE REAL ARRAY NULL[1:4];
PRELOAD_WITH 	 0.00000, -1.00000,  0.00000, 10.0,
		-1.00000,  0.00000,  0.00000, 25.0,	
		 0.00000,  0.00000, -1.00000,  1.0,
		 0.00000,  0.00000,  0.00000,  1.0;
REAL ARRAY X1[1:4,1:4];
PRELOAD_WITH 	 0.00000, -1.00000,  0.00000, 20.0,
		-1.00000,  0.00000,  0.00000, 25.0,
		 0.00000,  0.00000, -1.00000,  1.2,
		 0.00000,  0.00000,  0.00000,  1.0;
REAL ARRAY X2[1:4,1:4];
PRELOAD_WITH 	 0.00000, -1.00000,  0.00000, 30.0,
		-1.00000,  0.00000,  0.00000, 25.0,
		 0.00000,  0.00000, -1.00000,  0.9,
		 0.00000,  0.00000,  0.00000,  1.0;
REAL ARRAY X3[1:4,1:4];
PRELOAD_WITH 	-1.00000,  0.00000,  0.00000, 30.0,
		 0.00000,  1.00000,  0.00000, 25.0,
		 0.00000,  0.00000, -1.00000,  0.9,
		 0.00000,  0.00000,  0.00000,  1.0;
REAL ARRAY SQAR[1:4,1:4];
PRELOAD_WITH 0,0,0,1;
REAL ARRAY ZERO[1:4];
INTEGER I,M;
BOOLEAN FIRST;
STRING S;
LABEL L1;
SIMPLE PROCEDURE SORRY;
BEGIN	OUTSTR("SORRY"&CRLF&CRLF);
	CALL(0,"EXIT");
END;

SIMPLE PROCEDURE MOVE_IT(REAL ARRAY A,B);
BEGIN	INTEGER PLAN_SAV;
	A[3,4]←A[3,4]-1.00;
	B[3,4]←B[3,4]+1.0;
	ISSUE(5,"NLF","HAND",MESSAGE START_TRAJECTORY("HANOI",0));
	ISSUE(5,"NLF","HAND",MESSAGE OPEN_HAND(3));
	ISSUE(7,"NLF","HAND",MESSAGE MOVE_ARM(A,ARM_PLAN));
	IF ARM_PLAN THEN BEGIN
		ISSUE(5,"NLF","HAND",MESSAGE CLOSE_HAND(0.5));
		ISSUE(5,"NLF","HAND",MESSAGE MOVE_ARM(B,ARM_PLAN));
		ISSUE(5,"NLF","HAND",MESSAGE PLACE_ARM);
		ISSUE(7,"NLF","HAND",MESSAGE OPEN_HAND(3.0));
		IF (PLAN_SAV←ARM_PLAN) THEN BEGIN SQAR[1,4]←B[1,4];SQAR[2,4]←B[2,4];SQAR[3,4]←B[3,4]←B[3,4]-1;
		ISSUE(5,"NLF","HAND",MESSAGE ARM_CONO(SL,NULL,0,0));
		ISSUE(5,"NLF","HAND",MESSAGE MOVE_ARM(SQAR,ARM_PLAN));
		ISSUE(5,"NLF","HAND",MESSAGE CLOSE_HAND(0.5));
		ISSUE(5,"NLF","HAND",MESSAGE OPEN_HAND(3.0));
		B[3,4]←B[3,4]+1;
		ISSUE(7,"NLF","HAND",MESSAGE CLOSE_TRAJECTORY);
	END;
	END;
	IF ¬PLAN_SAV  THEN BEGIN
		OUTSTR("I CANNOT REACH THE BLOCK AT "
		&"("&CVS(A[1,4])&","&CVS(A[2,4])&")"&CRLF&
		"PLEASE MOVE IT TO "
		&"("&CVS(B[1,4])&","&CVS(B[2,4])&") AND TYPE C/R"&CRLF&CRLF);
		INCHWL;
		OUTSTR("THANK YOU"&CRLF&CRLF);
	END ELSE BEGIN
		ISSUE(7,"NLF","HAND",MESSAGE DO_IT(0,"HANOI"));
		IF ARM_STATUS THEN OUTSTR(CVOS(ARM_STATUS)&" SORRY, YOU WILL HAVE TO DO IT FOR ME"&CRLF);
	END;
END;

RECURSIVE PROCEDURE STACK(INTEGER H;REAL ARRAY A,B,C);
BEGIN	IF H=1 THEN
	BEGIN	MOVE_IT(A,B);
		RETURN ;
	END;
	H←H-1;
	STACK(H,A,C,B);
	MOVE_IT(A,B);
	STACK(H,C,B,A);
END;
PUT_DATA(0,0,"NLF");
WHILE ¬ YES_HAND DO CALL(1,"SLEEP");
OUTSTR("DRIVE INITIALIZED"&CRLF&CRLF);
DO BEGIN
ISSUE(5,"NLF","HAND",MESSAGE START_TRAJECTORY ("H00000",0));
ISSUE(5,"NLF","HAND",MESSAGE PARK_ARM);
ISSUE(5,"NLF","HAND",MESSAGE OPEN_HAND(3));
ISSUE(5,"NLF","HAND",MESSAGE CLOSE_TRAJECTORY);
OUTSTR("STAND CLEAR OF THE ARM AND TYPE C/R
");
INCHWL;
ISSUE(7,"NLF","HAND",MESSAGE DO_IT(0,"H00000"));
IF ARM_STATUS THEN BEGIN OUTSTR(CVOS(ARM_STATUS)&" PLEASE CHECK THE ARM & TYPE C/R"&'15&'12);
	INCHWL;
END;
END UNTIL ¬ARM_STATUS;
OUTSTR("PLACE BLOCKS AT (10,25) AND TYPE THE HEIGHT"
&CRLF&CRLF);
SETFORMAT(0,1);
X1[3,4]←0.8;
X2[3,4]←0.8;
X3[3,4]←0.8;
S←INCHWL;
I←INTSCAN(S,M);
IF I<1 THEN BEGIN OUTSTR("WE CANNOT MOVE BELOW THE TABLE"&CRLF&CRLF);
	SORRY;END;
M←2↑I-1;
OUTSTR("THAT'S "&CVS(M)& " MOVES, KEEP YOUR FINGERS CROSSED"&CRLF&CRLF);
SETFORMAT(-5,0);
X1[3,4]←X1[3,4]+I;
ISSUE(5,"NLF","HAND",MESSAGE START_TRAJECTORY ("H00000",0));
ISSUE(5,"NLF","HAND",MESSAGE MOVE_ARM(X1,ARM_PLAN));
ISSUE(5,"NLF","HAND",MESSAGE CLOSE_TRAJECTORY);
ISSUE(7,"NLF","HAND",MESSAGE DO_IT(0,"H00000"));
IF ARM_STATUS THEN OUTSTR(CVOS(ARM_STATUS)&" PLEASE CHECK THE ARM & TYPE C/R"&'15&'12);
OUTSTR("THIS IS WHERE THE ARM THINKS THE BLOCKS SHOULD BE
TYPE C/R TO PROCEED
");
INCHWL;
STACK(I,X1,X2,X3);
M←ISSUE(5,"NLF","HAND",MESSAGE START_TRAJECTORY("HANOI",0));
ISSUE(5,"NLF","HAND",MESSAGE PARK_ARM);
ISSUE(7,"NLF","HAND",MESSAGE CLOSE_TRAJECTORY);
ISSUE(7,"NLF","HAND",MESSAGE DO_IT(0,"HANOI"));
IF ARM_STATUS THEN OUTSTR("DID I HIT SOMEBODY!"&'15&'12) ELSE
OUTSTR("IF THAT HAD BEEN 64 BLOCKS THE WORLD WOULD HAVE JUST ENDED!
THANK YOU AND GOOD NIGHT."&CRLF&CRLF);
END;